# -*- coding:utf-8 -*-
from ihome import db
from . import api
from flask import request, current_app, jsonify, session,g
from ihome.models import User
from ihome.utils.image_storage import storage_image
from ihome.utils.response_code import RET
from ihome.constants import QINIU_DOMIN_PREFIX
from ihome.utils.common import login_required


#个人认证后的个人页面的显示
@api.route('/user/auth')
#判断登录
@login_required
def get_user_auth():
    '''
    1.获取用户信息
    2.获取当前用户模型
    3.返回模型中制动内容
    :return:
    '''
    user_id =g.user_id
    try:
        user = User.query.get(user_id)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno = RET.DBERR,errmsg = '查询数据错误')
    if not user :
        return jsonify( errno = RET.USERERR,errmsg = '用户不存在')
    return  jsonify(errno = RET.OK,errmsg = 'OK',data = user.to_auth_info())



#个人页面中实名认证页面实现
@api.route('/user/auth',methods = ['POST'])  #这里要注意的是不同的提交方式一直想不通的页面
@login_required
def set_user_auth():
    '''
    1.获取当前登录用户的id
    2.取到传过来的认证的消息
    3.通过id查找到当前用户
    4.更新用户的认证信息
    5.保存到数据库
    6.返回结果
    :return:
    '''
    #1.获取当前用户的id
    user_id = g.user_id
    #2.取到传过来的认证信息
    data_dict = request.json
    real_name = data_dict.get('real_name')
    id_card = data_dict.get('id_card')
    #3.通过id查找到当前用户
    try:
        user=User.query.get(user_id)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno= RET.DBERR,errmsg = '查询数据失败')
    if not user:
        return jsonify(errno = RET.USERERR,errmsg='用户不存在')
    #4.更新用户的认证信息
    user.real_name =real_name
    user.id_card = id_card
    #5.保存到数据库
    try:
        db.session.commit()
    except Exception as e:
        current_app.logger.error(e)
        db.session.rollback()
        return jsonify(errno= RET.DBERR,errmsg='保存数据失败')
    return jsonify(errno=RET.OK,errmsg='OK')

#用户界面上传完毕后的显示  获取的是用户的个人信息包括头像
@api.route('/user')
#判断登录
@login_required
def get_user_info():
    '''
    1.获取用户信息
    2.获取当前用户模型
    3.返回模型中制动内容
    :return: 
    '''
    user_id =g.user_id
    try:
        user = User.query.get(user_id)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno = RET.DBERR,errmsg = '查询数据错误')
    if not user :
        return jsonify( errno = RET.USERERR,errmsg = '用户不存在')
    return  jsonify(errno = RET.OK,errmsg = 'OK',data = user.to_dict())

#头像上传保存
@api.route('/user/avatar',methods=['POST'])
#判断是否登录的装饰器
@login_required
def set_user_avatar():
    '''
    0.判断用户是否登录
    1.获取到上传文件
    2.正在将文件上传到7牛云
    3.将投向信息更新当前用户的模型中
    4.返回上传结果
    :return: 
    '''

    #0
    user_id = g.user_id

    #1.获取到上传文件
    try:
        avatar_file = request.files.get('avatar').read()
    except Exception as e :
        return  jsonify(errno=RET.PARAMERR,errmsg='参数错误')

    # 2.正在将文件上传到7牛云
    try:
        url = storage_image(avatar_file)
    except Exception as e:
        return jsonify(errno=RET.THIRDERR,errmsg='上传图片错误')

    try:
        user =User.query.get(user_id)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR,errmsg='获取用户数据失败')

    #3.将投向信息更新当前用户的模型中
    if not user :
        return jsonify(errno=RET.USERERR,errmsg = '用户名错误')
    #设置用户模型相关数据
    user.avatar_url=url
    #将数据保存到数据库
    try:
        db.session.commit()
    except Exception as e:
        current_app.logger.error(e)
        db.session.rollback()
        return jsonify(errno=RET.DBERR,errmsg='保存用户名错误')

    # 4. 返回上传结果
    return jsonify(errno=RET.OK,errmsg='OK',data={'avatar_url':QINIU_DOMIN_PREFIX+url})



# 用户名上传机器保存
@api.route('/user/name',methods=['POST'])
@login_required
def set_user_name():
    '''
    0判断用户是否已经登录
    1.获取传入的参数
    2.将用户名信息更新到当前的用户模型中
    3.返回结果
    :return: 
    '''

    #1.获取传入的参数
    data_dict = request.json
    name = data_dict.get('name')
    if not name:
        return jsonify(errno = RET.PARAMERR,errmsg= '参数不全')

    #2.将用户信息更新到当前的用户模型中

    #2.1获取用户信息
    user_id =g.user_id
    try:
        user = User.query.get(user_id)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno = RET.DBERR,errmsg = '获取用户信息失败')
    if not user :
        return jsonify(errno = RET.NODATA,errmsg = '用户不存在')
    #更新用户信息
    user.name = name
    try:
        db.session.commit()
    except Exception  as e:
        current_app.logger.error(e)
        db.session.roolback()
        return jsonify(errno = RET.DBERR,errmsg='保存数据失败')

    #将session中保存的数据进行试试更新
    session['name']= name

    #返回结果
    return jsonify(errno= RET.OK,errmsg = 'OK')
